<?php

class AvatarLogic {

    public function imagem($requisitante, $params = null) {
        $fp = fopen($_FILES["imagem"]["tmp_name"], "rb");
        $imagem_temp = fread($fp, filesize($_FILES["imagem"]["tmp_name"]));
        fclose($fp);
        session_start();
        $_SESSION['img_crop'] = $imagem_temp;
    }

    public function exibir() {
        session_start();
        $image = $_SESSION['img_crop'];
        unset($_SESSION['img_crop']);
        header("Content-type: jpeg");
        echo $image;
    }

    public function salvar($requisitante, $params = null) {
        $USER_SECURITY = SecurityHelper::getInstancia()->getUsuario();

        if ($_SERVER['REQUEST_METHOD'] === "POST" && $USER_SECURITY->isPageAllow($requisitante->modulo, $requisitante->page)) {
            
            $imagem = isset($_FILES['imagem']) ? $_FILES['imagem'] : NULL;
            $name_file = 'fp' . time() . mt_rand(5, 15) . md5($imagem['name']) . ".jpg";
            $file_path = "public/upload/temp/{$name_file}";
            $this->uploadImagemAvatar($imagem, $file_path);
            $this->uploadAvatarCrop($file_path);
            $this->isSize($file_path);

            $img = TratarImageHelper::tratarImageBytea(PATH . $file_path);
            unlink($file_path);

            $query = "UPDATE pessoal.colaborador SET des_avatar = :des_avatar WHERE ide_colaborador = :ide_colaborador";
            $result = DbORM::update(
                            $query, array(
                        "ide_colaborador" => $USER_SECURITY->getIdColaborador(),
                        "bytea" => array(
                            "colmap" => "des_avatar",
                            "value" => $img
                        )
                            )
            );

            if ($result) {
                TFeedbackHelper::notifySuccess('Avatar alterado com sucesso!!!');
                RedirectorHelper::goToController('Principal');
            } else {
                TFeedbackHelper::notifySuccess('Ocorreu um error ao salvar o avatar!!!');
                RedirectorHelper::goToControllerAction('Usuario', 'alterarAvatar');
            }
            
        } else {
                TFeedbackHelper::notifySuccess('Acesso negado!!!');
                RedirectorHelper::goToController('Principal');
        }
    }

    public function exibirAvatar() {
        $IDE_COLABORADOR = SecurityHelper::getInstancia()->getUsuario()->getIdColaborador();
        $handle = DbORM::obterImage('des_avatar', 'pessoal.colaborador', "ide_colaborador = '{$IDE_COLABORADOR}'");
        header("Content-type: jpeg");
        echo $handle;
    }

    private function uploadImagemAvatar($imagem, $file_path) {
        if (move_uploaded_file($imagem['tmp_name'], $file_path)) {
            return true;
        } else {
            return false;
        }
    }

    private function uploadAvatarCrop($file_path) {
        $oImg = new ImagemHelper($file_path);
        $isValid = $oImg->valida();
        if ($isValid === 'OK') {
            $oImg->posicaoCrop($_POST['x'], $_POST['y']);
            $oImg->redimensiona($_POST['w'], $_POST['h'], 'crop');
            $oImg->grava($file_path, 300);
        }
    }

    private function isSize($file_path) {

        $img_info = getimagesize($file_path);
        $img_w = (int) $img_info[0];

        if ($img_w > 80) {
            $oImg = new ImagemHelper($file_path);
            $isValid = $oImg->valida();
            if ($isValid === 'OK') {
                $oImg->redimensiona(80);
                $oImg->grava($file_path, 300);
            }
        }
    }

}
